home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / a_utils / yacc / flexyacc / aflex.lha / aflex / src / ascan_dfa.a < prev    next >
Text File  |  1992-12-29  |  2KB  |  73 lines

  1. package ascan_dfa is
  2. aflex_debug : boolean := false;
  3. yytext_ptr : integer; -- points to start of yytext in buffer
  4.  
  5. -- yy_ch_buf has to be 2 characters longer than YY_BUF_SIZE because we need
  6. -- to put in 2 end-of-buffer characters (this is explained where it is
  7. -- done) at the end of yy_ch_buf
  8. YY_READ_BUF_SIZE : constant integer :=  8192;
  9. YY_BUF_SIZE : constant integer := YY_READ_BUF_SIZE * 2; -- size of input buffer
  10. type unbounded_character_array is array(integer range <>) of character;
  11. subtype ch_buf_type is unbounded_character_array(0..YY_BUF_SIZE + 1);
  12. yy_ch_buf : ch_buf_type;
  13. yy_cp, yy_bp : integer;
  14.  
  15. -- yy_hold_char holds the character lost when yytext is formed
  16. yy_hold_char : character;
  17. yy_c_buf_p : integer;   -- points to current character in buffer
  18.  
  19. function YYText return string;
  20. function YYLength return integer;
  21. procedure YY_DO_BEFORE_ACTION;
  22. --These variables are needed between calls to YYLex.
  23. yy_init : boolean := true; -- do we need to initialize YYLex?
  24. yy_start : integer := 0; -- current start state number
  25. subtype yy_state_type is integer;
  26. yy_last_accepting_state : yy_state_type;
  27. yy_last_accepting_cpos : integer;
  28. end ascan_dfa;
  29.  
  30. with ascan_dfa; use ascan_dfa; 
  31. package body ascan_dfa is
  32. function YYText return string is
  33.     i : integer;
  34.     str_loc : integer := 1;
  35.     buffer : string(1..1024);
  36.     EMPTY_STRING : constant string := "";
  37. begin
  38.     -- find end of buffer
  39.     i := yytext_ptr;
  40.     while ( yy_ch_buf(i) /= ASCII.NUL ) loop
  41.     buffer(str_loc ) := yy_ch_buf(i);
  42.         i := i + 1;
  43.     str_loc := str_loc + 1;
  44.     end loop;
  45. --    return yy_ch_buf(yytext_ptr.. i - 1);
  46.  
  47.     if (str_loc < 2) then
  48.         return EMPTY_STRING;
  49.     else
  50.       return buffer(1..str_loc-1);
  51.     end if;
  52.  
  53. end;
  54.  
  55. -- returns the length of the matched text
  56. function YYLength return integer is
  57. begin
  58.     return yy_cp - yy_bp;
  59. end YYLength;
  60.  
  61. -- done after the current pattern has been matched and before the
  62. -- corresponding action - sets up yytext
  63.  
  64. procedure YY_DO_BEFORE_ACTION is
  65. begin
  66.     yytext_ptr := yy_bp;
  67.     yy_hold_char := yy_ch_buf(yy_cp);
  68.     yy_ch_buf(yy_cp) := ASCII.NUL;
  69.     yy_c_buf_p := yy_cp;
  70. end YY_DO_BEFORE_ACTION;
  71.  
  72. end ascan_dfa;
  73.